/**
        @file   TetrisBoard.h
        @date   2013/01/24
        @author 임진영(deviak@deviak.com)
        @brief  테트리스 보드 클래스
*/
#ifndef TETRISBOARD_H_
#define TETRISBOARD_H_

#include <stdio.h>
#include <iostream>
#include <vector>

#include "Define.h"

using namespace std;

class TetrisGame;

/**
        @class  TetrisBoard
        @date   2013/01/24
        @author 임진영(deviak@deviak.com)
        @brief  테트리스 보드 클래스
*/
class TetrisBoard
{
public:
	typedef enum { kTetrisBoardWidth = 14, kTetrisBoardHeight = 23 };			///< Tetris Board 크기
	//typedef enum { kBlockTypeMax = 2, kBlockWidth = 4, kBlockHeight = 4 };		///< Tetris Block 갯 수 및 크기

public:
	TetrisBoard(TetrisGame* game);
	virtual ~TetrisBoard(void);

	void		Init();												///< 보드 초기화
	void		Render();											///< 보드 출력
	void		Release();											///< 메모리 해제
	void		BlockOn();											///< board_를 stage_에 적용시킨다
	void		MoveBlock(const POSITION &p, const int* block);		///< 블록을 움직인다
	void		TurnBlock(int* tmp);								///< 블록을 회전시킨다
	void		CheckLine();										///< 줄이 채워졌는지 확인한다
	bool		CheckCreateBlock(const int* block);					///< 블록이 생성될 때 채워졌는지 확인한다
	bool		CheckOver(const POSITION &p, const int* block);		///< 블록이 충돌이 났는지 검사한다
	
	int*		Board()	 { return &board_[0][0]; }					///< 보드

private:

	TetrisGame*		game_;														///< TetrisGame

	POSITION		pos_;

	int				stage_[kTetrisBoardHeight][kTetrisBoardWidth];				///< 실제 Stage
	int				board_[kTetrisBoardHeight][kTetrisBoardWidth];				///< 임시 저장 Board
};

#endif